#include<bits/stdc++.h>
#define lowbit(i) i&(-i)
using namespace std;
const int maxn=1001000+5;
int C[maxn],dfn[maxn],low[maxn];
int getsum(int x) {
	int ans=0;
	while(x) ans+=C[x],x-=lowbit(x);
	return ans;
}
void add(int x,int k,int n) {
	while(x<=n) C[x]+=k,x+=lowbit(x);
}
struct Edge {
	int u,v,w,nxt;
} e[maxn];
int E,elast[maxn],p[maxn],dep[maxn];
void ad(int u,int v,int w) {
	e[++E].u=u;
	e[E].v=v;
	e[E].w=w;
	e[E].nxt=elast[u];
	elast[u]=E;
}
int cnt=0;
void dfs(int x,int fa) {
	dfn[x]=low[x]=++cnt;
	dep[x]=dep[fa]+1;
	for(int i=elast[x]; i; i=e[i].nxt) {
		int to=e[i].v;
		if(to==fa) {
			continue;
		}
		dfs(to,x);
	}
	low[x]=cnt;
}
int read(){
	int x;
	scanf("%d",&x);
	return x;
}
int main() {
	// int tot=0;
	int n=read();
	for(int i=1,u,v; i<n; i++) {
		cin>>u>>v;
		ad(u,v,1);
		ad(v,u,1);
	}
	dfs(1,-1);
	int m=read()+n--;
	char ch;
	while(m--) {
		cin>>ch;
		if((ch)=='A') {
			int a=read(),b=read();
			add(dfn[b],1,n);
			add(low[b]+1,-1,n);
		}
		if((ch)=='W'){
			int a=read();
			cout<<dep[a]-getsum(dfn[a])-1<<endl;
		}
	}
}